#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

// 共享资源
int shared_resource = 0;

// 互斥锁
pthread_mutex_t lock;

// 管程中的临界区函数
void critical_section() {
    pthread_mutex_lock(&lock);
    // 临界区代码
    shared_resource++;
    printf("Shared resource value: %d\n", shared_resource);
    sleep(1); // 模拟耗时操作
    pthread_mutex_unlock(&lock);
}

// 线程函数
void* thread_function(void* arg) {
    for (int i = 0; i < 5; i++) {
        critical_section();
    }
    return NULL;
}

int main() {
    pthread_t thread1, thread2;

    // 初始化互斥锁
    pthread_mutex_init(&lock, NULL);

    // 创建两个线程
    pthread_create(&thread1, NULL, thread_function, NULL);
    pthread_create(&thread2, NULL, thread_function, NULL);

    // 等待线程完成
    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);

    // 销毁互斥锁
    pthread_mutex_destroy(&lock);

    return 0;
}